//package com;
//
//import com.fazecast.jSerialComm.*;
//
//public class SerialPortManager {
//    private SerialPort mSerialPort;
//    public SerialPortManager() {
//        mSerialPort = null;
//    }
//
//    public void init(String portName) {
//        System.out.println(portName);
//        mSerialPort = SerialPort.getCommPort(portName);
//        mSerialPort.openPort();
//        mSerialPort.setFlowControl(SerialPort.FLOW_CONTROL_DISABLED);
//        mSerialPort.setComPortParameters(115200, 8, SerialPort.ONE_STOP_BIT, SerialPort.NO_PARITY);
//        mSerialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_BLOCKING | SerialPort.TIMEOUT_WRITE_BLOCKING, 1000, 1000);
//    }
//
//    public void close() {
//        if (mSerialPort != null && mSerialPort.isOpen()) {
//            mSerialPort.closePort();
//        }
//    }
//
//    private int write(byte[] data) {
//        if (mSerialPort == null || !mSerialPort.isOpen()) {
//            return 0;
//        }
//        return mSerialPort.writeBytes(data, data.length);
//    }
//
//    private int read(byte[] data) {
//        if (mSerialPort == null || !mSerialPort.isOpen()) {
//            return 0;
//        }
//        return mSerialPort.readBytes(data, data.length);
//    }
//
//    public int readWriteTest(String portName)
//    {
//        init(portName);
//        byte[] order = {(byte)0xA5,(byte)0x5A,(byte)0x02,(byte)0x00,(byte)0xFD};
//        write(order);
//        byte[] data = new byte[100];
//        try{
//            int i=0;
//            while (mSerialPort.bytesAvailable() < 6 && i++ < 100)
//                Thread.sleep(20);
//        }catch(Exception e){}
//
//        int len = read(data);
//        if(data == null)
//        {
//            close();
//            return -1;
//        }
//        System.out.println(len);
//        for(int i=0;i<len;i++)
//        {
//            System.out.format("%x ",data[i]);
//        }
//        close();
//        return len;
//    }
//
//    public static void main(String[] args) throws InterruptedException {
//        SerialPortManager sm = new SerialPortManager();
//        // sm.init("COM3");
//        int flag=0;
//        SerialPort[] serialPorts = SerialPort.getCommPorts();//查找所有串口
//        for (SerialPort port : serialPorts) {
//            System.out.println("Port:" + port.getSystemPortName());//打印串口名称，如COM4
//            System.out.println("PortDesc:" + port.getPortDescription());//打印串口类型，如USB Serial
//            System.out.println("PortDesc:" + port.getDescriptivePortName());//打印串口的完整类型，如USB-SERIAL CH340(COM4)
//        }
//
//        System.out.println(serialPorts.length);
//
//        if (serialPorts.length!=0){
//            SerialPort serialPort = serialPorts[0];//获取到第一个串口
//            serialPort.setBaudRate(500000);
//            //  serialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_BLOCKING | SerialPort.TIMEOUT_WRITE_BLOCKING, 1000, 1000);//设置超时
//            //  serialPort.setDTR();//设置RTS。也可以设置DTR
//            //  serialPort.setFlowControl(SerialPort.FLOW_CONTROL_DISABLED);//设置串口的控制流，可以设置为disabled，或者CTS, RTS/CTS, DSR, DTR/DSR, Xon, Xoff, Xon/Xoff等
//            serialPort.setComPortParameters(500000, 8, 0, 1);//一次性设置所有的串口参数，第一个参数为波特率，默认9600；第二个参数为每一位的大小，默认8，可以输入5到8之间的值；第三个参数为停止位大小，只接受内置常量，可以选择(ONE_STOP_BIT, ONE_POINT_FIVE_STOP_BITS, TWO_STOP_BITS)；第四位为校验位，同样只接受内置常量，可以选择 NO_PARITY, EVEN_PARITY, ODD_PARITY, MARK_PARITY,SPACE_PARITY。
//            if (!serialPort.isOpen()) {
//
//                boolean isCommOpeded = serialPort.openPort();//判断串口是否打开，如果没打开，就打开串口。打开串口的函数会返回一个boolean值，用于表明串口是否成功打开了
//
//                System.out.println(serialPort.getSystemPortName());
//                isCommOpeded = serialPort.openPort();
//                System.out.println(String.valueOf(isCommOpeded));
//                isCommOpeded = serialPort.openPort();
//                System.out.println(String.valueOf(isCommOpeded));
//                isCommOpeded = serialPort.openPort();
//                System.out.println(String.valueOf(isCommOpeded));
//                isCommOpeded = serialPort.openPort();
//                System.out.println(String.valueOf(isCommOpeded));
//                isCommOpeded = serialPort.openPort();
//                System.out.println(String.valueOf(isCommOpeded));
//                isCommOpeded = serialPort.openPort();
//                System.out.println(String.valueOf(isCommOpeded));
//                isCommOpeded = serialPort.openPort();
//                System.out.println(String.valueOf(isCommOpeded));
//            }
//
//            //  serialPort.closePort();//关闭串口。该函数同样会返回一个boolean值，表明串口是否成功关闭
//            if (serialPort.isOpen()) {
//                //   System.out.format("aaaaa");
//           /* String writeData = "hello world";//要发送的字符串
//            byte[] bytes = writeData.getBytes();//将字符串转换为字节数组
//            serialPort.writeBytes(bytes,bytes.length);//将字节数组全部写入串口*/
//                Thread.sleep(100);//休眠0.1秒，等待下位机返回数据。如果不休眠直接读取，有可能无法成功读到数据
//                String readData = "";
//                while (serialPort.bytesAvailable() > 0) {//循环读取所有的返回数据。如果可读取数据长度为0或-1，则停止读取
//                    byte[] newData =new byte[1];//创建一个字节数组，长度为可读取的字节长度
//                    int numRead = serialPort.readBytes(newData, 1);//将串口中可读取的数据读入字节数组，返回值为本次读取到的字节长度
//                    System.out.println(newData[0]);
//                    if(newData[0]==-67||newData[0]==47||newData[0]==-86||newData[0]==-1||newData[0]==-15||newData[0]==8||newData[0]==-86||newData[0]==0||newData[0]==9||newData[0]==0||newData[0]==9) {
//
//                        flag++;
//                    }
//                    else
//                    {
//                        flag=0;
//                    }
//                    if(flag==11) {
//                        flag = 0;
//                        System.out.println("火灾警告");
//                    }
//                    Thread.sleep(10);//休眠0.02秒，等待下位机传送数据到串口。如果不休眠，直接再次使用port.bytesAvailable()函数会因为下位机还没有返回数据而返回-1，并跳出循环导致数据没读完。休眠时间可以自行调试，时间越长，单次读取到的数据越多。
//                }
//                System.out.println("readString:" + readData);
//            }
//        }
//    }}